package com.example.tenant.config;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.example.tenant.entities.BaseDO;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        // 第一种赋值方法
        BaseDO baseDO = (BaseDO) metaObject.getOriginalObject();
        baseDO.setCreateTime(LocalDateTime.now());
        // 第二种赋值方法
        this.setFieldValByName("updateTime", LocalDateTime.now(), metaObject);
        this.setFieldValByName("creatorId", 1, metaObject); // 假设默认创建人为1
        /**
         * mybatis高级版本，还有以下两种方式
         */
        // 严格模式：只填充有 @TableField(fill = INSERT) 注解的字段
//        this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
        // 非严格模式：无论是否有注解，直接填充
//        this.fillStrategy(metaObject, "createTime", LocalDateTime.now());
        // 或直接设置值
//        metaObject.setValue("createTime", LocalDateTime.now());
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        this.setFieldValByName("updateTime", LocalDateTime.now(), metaObject);
        this.setFieldValByName("updaterId", 1, metaObject); // 假设默认更新人为1
    }
}
